core: Use GFile for repo constructor API, and a bit more internally
authorColin Walters <walters@verbum.org>
Thu, 22 Dec 2011 16:04:08 +0000 (11:04 -0500)
committerColin Walters <walters@verbum.org>
Thu, 22 Dec 2011 16:04:08 +0000 (11:04 -0500)
Also, ensure that the repo directory GFile is absolute - this avoids
a getcwd() syscall every time we construct a GFile object.

21 files changed:
src/daemon/ot-daemon.c
src/libostree/ostree-repo.c
src/libostree/ostree-repo.h
src/ostree/ostree-pull.c
src/ostree/ot-builtin-checkout.c
src/ostree/ot-builtin-checksum.c
src/ostree/ot-builtin-commit.c
src/ostree/ot-builtin-compose.c
src/ostree/ot-builtin-diff.c
src/ostree/ot-builtin-fsck.c
src/ostree/ot-builtin-init.c
src/ostree/ot-builtin-local-clone.c
src/ostree/ot-builtin-log.c
src/ostree/ot-builtin-ls.c
src/ostree/ot-builtin-remote.c
src/ostree/ot-builtin-rev-parse.c
src/ostree/ot-builtin-run-triggers.c
src/ostree/ot-builtin-show.c
src/ostree/ot-builtins.h
src/ostree/ot-main.c
src/ostree/ot-main.h

index f0ac5535a47a4ea64c578cef4040e736b7fed8f2..b688fedddd050c592c140eb529cd6dc70ebff17b 100644 (file)
@@ -253,11 +253,11 @@ on_name_acquired (GDBusConnection *connection,
 {
   OstreeDaemon *self = user_data;
   GError *error = NULL;
-  char *repo_path;
+  GFile *repo_file = NULL;
 
-  repo_path = g_build_filename (ot_gfile_get_path_cached (self->prefix), "repo", NULL);
-  self->repo = ostree_repo_new (repo_path);
-  g_free (repo_path);
+  repo_file = g_file_get_child (self->prefix, "repo");
+  self->repo = ostree_repo_new (repo_file);
+  g_clear_object (&repo_file);
   if (!ostree_repo_check (self->repo, &error))
     {
       g_printerr ("%s\n", error->message);
index 569dff5f6fffc11b3bfbd0eeff4e80ed74c29562..c26fa50a8d72faf78ebde69e9f60001cdc3d714e 100644 (file)
@@ -51,13 +51,12 @@ G_DEFINE_TYPE (OstreeRepo, ostree_repo, G_TYPE_OBJECT)
 typedef struct _OstreeRepoPrivate OstreeRepoPrivate;
 
 struct _OstreeRepoPrivate {
-  char *path;
-  GFile *repo_file;
+  GFile *repodir;
   GFile *tmp_dir;
   GFile *local_heads_dir;
   GFile *remote_heads_dir;
-  char *objects_path;
-  char *config_path;
+  GFile *objects_dir;
+  GFile *config_file;
 
   gboolean inited;
   gboolean in_transaction;
@@ -74,13 +73,12 @@ ostree_repo_finalize (GObject *object)
   OstreeRepo *self = OSTREE_REPO (object);
   OstreeRepoPrivate *priv = GET_PRIVATE (self);
 
-  g_free (priv->path);
-  g_clear_object (&priv->repo_file);
+  g_clear_object (&priv->repodir);
   g_clear_object (&priv->tmp_dir);
   g_clear_object (&priv->local_heads_dir);
   g_clear_object (&priv->remote_heads_dir);
-  g_free (priv->objects_path);
-  g_free (priv->config_path);
+  g_clear_object (&priv->objects_dir);
+  g_clear_object (&priv->config_file);
   g_hash_table_destroy (priv->pending_transaction_tmpfiles);
   if (priv->config)
     g_key_file_free (priv->config);
@@ -100,7 +98,8 @@ ostree_repo_set_property(GObject         *object,
   switch (prop_id)
     {
     case PROP_PATH:
-      priv->path = g_value_dup_string (value);
+      /* Canonicalize */
+      priv->repodir = ot_gfile_new_for_path (g_file_get_path (g_value_get_object (value)));
       break;
     default:
       G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
@@ -120,7 +119,7 @@ ostree_repo_get_property(GObject         *object,
   switch (prop_id)
     {
     case PROP_PATH:
-      g_value_set_string (value, priv->path);
+      g_value_set_object (value, priv->repodir);
       break;
     default:
       G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
@@ -142,15 +141,14 @@ ostree_repo_constructor (GType                  gtype,
 
   priv = GET_PRIVATE (object);
 
-  g_assert (priv->path != NULL);
+  g_assert (priv->repodir != NULL);
   
-  priv->repo_file = ot_gfile_new_for_path (priv->path);
-  priv->tmp_dir = g_file_resolve_relative_path (priv->repo_file, "tmp");
-  priv->local_heads_dir = g_file_resolve_relative_path (priv->repo_file, "refs/heads");
-  priv->remote_heads_dir = g_file_resolve_relative_path (priv->repo_file, "refs/remotes");
+  priv->tmp_dir = g_file_resolve_relative_path (priv->repodir, "tmp");
+  priv->local_heads_dir = g_file_resolve_relative_path (priv->repodir, "refs/heads");
+  priv->remote_heads_dir = g_file_resolve_relative_path (priv->repodir, "refs/remotes");
   
-  priv->objects_path = g_build_filename (priv->path, "objects", NULL);
-  priv->config_path = g_build_filename (priv->path, "config", NULL);
+  priv->objects_dir = g_file_get_child (priv->repodir, "objects");
+  priv->config_file = g_file_get_child (priv->repodir, "config");
 
   return object;
 }
@@ -169,10 +167,10 @@ ostree_repo_class_init (OstreeRepoClass *klass)
 
   g_object_class_install_property (object_class,
                                    PROP_PATH,
-                                   g_param_spec_string ("path",
+                                   g_param_spec_object ("path",
                                                         "",
                                                         "",
-                                                        NULL,
+                                                        G_TYPE_FILE,
                                                         G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY));
 }
 
@@ -187,7 +185,7 @@ ostree_repo_init (OstreeRepo *self)
 }
 
 OstreeRepo*
-ostree_repo_new (const char *path)
+ostree_repo_new (GFile *path)
 {
   return g_object_new (OSTREE_TYPE_REPO, "path", path, NULL);
 }
@@ -474,7 +472,8 @@ ostree_repo_write_config (OstreeRepo *self,
   g_return_val_if_fail (priv->inited, FALSE);
 
   data = g_key_file_to_data (new_config, &len, error);
-  if (!g_file_set_contents (priv->config_path, data, len, error))
+  if (!g_file_replace_contents (priv->config_file, data, len, NULL, FALSE, 0, NULL,
+                                NULL, error))
     goto out;
   
   g_key_file_free (priv->config);
@@ -569,15 +568,16 @@ ostree_repo_check (OstreeRepo *self, GError **error)
   if (priv->inited)
     return TRUE;
 
-  if (!g_file_test (priv->objects_path, G_FILE_TEST_IS_DIR))
+  if (!g_file_test (ot_gfile_get_path_cached (priv->objects_dir), G_FILE_TEST_IS_DIR))
     {
       g_set_error (error, G_IO_ERROR, G_IO_ERROR_FAILED,
-                   "Couldn't find objects directory '%s'", priv->objects_path);
+                   "Couldn't find objects directory '%s'",
+                   ot_gfile_get_path_cached (priv->objects_dir));
       goto out;
     }
   
   priv->config = g_key_file_new ();
-  if (!g_key_file_load_from_file (priv->config, priv->config_path, 0, error))
+  if (!g_key_file_load_from_file (priv->config, ot_gfile_get_path_cached (priv->config_file), 0, error))
     {
       g_prefix_error (error, "Couldn't parse config file: ");
       goto out;
@@ -627,11 +627,11 @@ ostree_repo_check (OstreeRepo *self, GError **error)
   return ret;
 }
 
-const char *
+GFile *
 ostree_repo_get_path (OstreeRepo  *self)
 {
   OstreeRepoPrivate *priv = GET_PRIVATE (self);
-  return priv->path;
+  return priv->repodir;
 }
 
 GFile *
@@ -1132,15 +1132,12 @@ ostree_repo_get_object_path (OstreeRepo  *self,
                              OstreeObjectType type)
 {
   OstreeRepoPrivate *priv = GET_PRIVATE (self);
-  char *path;
   char *relpath;
   GFile *ret;
 
   relpath = ostree_get_relative_object_path (checksum, type);
-  path = g_build_filename (priv->path, relpath, NULL);
+  ret = g_file_resolve_relative_path (priv->repodir, relpath);
   g_free (relpath);
-  ret = ot_gfile_new_for_path (path);
-  g_free (path);
  
   return ret;
 }
@@ -1974,7 +1971,6 @@ ostree_repo_iter_objects (OstreeRepo  *self,
                           GError        **error)
 {
   OstreeRepoPrivate *priv = GET_PRIVATE (self);
-  GFile *objectdir = NULL;
   GFileEnumerator *enumerator = NULL;
   gboolean ret = FALSE;
   GFileInfo *file_info = NULL;
@@ -1983,8 +1979,7 @@ ostree_repo_iter_objects (OstreeRepo  *self,
   g_return_val_if_fail (error == NULL || *error == NULL, FALSE);
   g_return_val_if_fail (priv->inited, FALSE);
 
-  objectdir = ot_gfile_new_for_path (priv->objects_path);
-  enumerator = g_file_enumerate_children (objectdir, OSTREE_GIO_FAST_QUERYINFO, 
+  enumerator = g_file_enumerate_children (priv->objects_dir, OSTREE_GIO_FAST_QUERYINFO, 
                                           G_FILE_QUERY_INFO_NOFOLLOW_SYMLINKS,
                                           NULL, 
                                           error);
@@ -2001,7 +1996,7 @@ ostree_repo_iter_objects (OstreeRepo  *self,
       
       if (strlen (name) == 2 && type == G_FILE_TYPE_DIRECTORY)
         {
-          GFile *objdir = g_file_get_child (objectdir, name);
+          GFile *objdir = g_file_get_child (priv->objects_dir, name);
           if (!iter_object_dir (self, objdir, callback, user_data, error))
             {
               g_object_unref (objdir);
@@ -2023,7 +2018,6 @@ ostree_repo_iter_objects (OstreeRepo  *self,
  out:
   g_clear_object (&file_info);
   g_clear_object (&enumerator);
-  g_clear_object (&objectdir);
   return ret;
 }
 
index 89b00d64290947eaa98cb5e753fdab3b76ad893e..272d1594b045432ad208fe7919514e7b2a3cfcee 100644 (file)
@@ -50,11 +50,11 @@ typedef struct {
 
 GType ostree_repo_get_type (void);
 
-OstreeRepo* ostree_repo_new (const char *path);
+OstreeRepo* ostree_repo_new (GFile *path);
 
 gboolean      ostree_repo_check (OstreeRepo  *self, GError **error);
 
-const char *  ostree_repo_get_path (OstreeRepo  *self);
+GFile *       ostree_repo_get_path (OstreeRepo  *self);
 
 typedef enum {
   OSTREE_REPO_MODE_BARE,
index 232e77c74b8025efe6738a8d8ffd5072fe0cc379..6431cb62410641732a260de344154d7fc24656ff 100644 (file)
@@ -351,7 +351,7 @@ store_commit_recurse (OstreeRepo   *repo,
 }
                       
 static gboolean
-ostree_builtin_pull (int argc, char **argv, const char *repo_path, GError **error)
+ostree_builtin_pull (int argc, char **argv, GFile *repo_path, GError **error)
 {
   GOptionContext *context;
   gboolean ret = FALSE;
index 3aecfc0d81f68aa25cee6b3578cda6ae44ea1641..3fd40456cb25809a364b4849336207ae202a4df0 100644 (file)
@@ -35,7 +35,7 @@ static GOptionEntry options[] = {
 };
 
 gboolean
-ostree_builtin_checkout (int argc, char **argv, const char *repo_path, GError **error)
+ostree_builtin_checkout (int argc, char **argv, GFile *repo_path, GError **error)
 {
   GOptionContext *context;
   gboolean ret = FALSE;
index 911482e6768d101c4a76cae19925585c8cb3cf19..2e5f665d40d9513dd3e902137d65ab5c0bc6b876 100644 (file)
@@ -55,7 +55,7 @@ on_checksum_received (GObject    *obj,
 }
 
 gboolean
-ostree_builtin_checksum (int argc, char **argv, const char *repo_path, GError **error)
+ostree_builtin_checksum (int argc, char **argv, GFile *repo_path_path, GError **error)
 {
   GOptionContext *context;
   gboolean ret = FALSE;
index d84a77acf04979d7c7ae9f0c26205c1d173a91ee..d97c27da3924561d6f6eebf6a70028839a7e6d04 100644 (file)
@@ -53,7 +53,7 @@ static GOptionEntry options[] = {
 };
 
 gboolean
-ostree_builtin_commit (int argc, char **argv, const char *repo_path, GError **error)
+ostree_builtin_commit (int argc, char **argv, GFile *repo_path, GError **error)
 {
   GOptionContext *context;
   gboolean ret = FALSE;
index 9ac121827e4d14092891c39d23c1c2a29ad5d0bf..bf3fc2805a3d7f52ebe2bd94aab4b21872b1e8a8 100644 (file)
@@ -70,7 +70,7 @@ add_branch (OstreeRepo          *repo,
 }
 
 gboolean
-ostree_builtin_compose (int argc, char **argv, const char *repo_path, GError **error)
+ostree_builtin_compose (int argc, char **argv, GFile *repo_path, GError **error)
 {
   GOptionContext *context;
   gboolean ret = FALSE;
index f48f04f7c4946ad57b6b2d891af6263ab49e8069..c669aeac886e180d0e2950b51b80ee1e43148ba5 100644 (file)
@@ -62,7 +62,7 @@ parse_file_or_commit (OstreeRepo  *repo,
 }
 
 gboolean
-ostree_builtin_diff (int argc, char **argv, const char *repo_path, GError **error)
+ostree_builtin_diff (int argc, char **argv, GFile *repo_path, GError **error)
 {
   GOptionContext *context;
   gboolean ret = FALSE;
index 4ca0aa7de1d8340450d12afdf442e52a988cf811..fcd7070f4464fdd1036c7de082c6f97b40bb40e9 100644 (file)
@@ -176,7 +176,7 @@ object_iter_callback (OstreeRepo    *repo,
 }
 
 gboolean
-ostree_builtin_fsck (int argc, char **argv, const char *repo_path, GError **error)
+ostree_builtin_fsck (int argc, char **argv, GFile *repo_path, GError **error)
 {
   GOptionContext *context;
   OtFsckData data;
index 96bf67f21cde4487ef005656de18e6be899c09ef..935bae70aa06e53099df2d566ba42fc4032add1f 100644 (file)
@@ -39,11 +39,10 @@ static GOptionEntry options[] = {
 
 
 gboolean
-ostree_builtin_init (int argc, char **argv, const char *repo_path, GError **error)
+ostree_builtin_init (int argc, char **argv, GFile *repo_path, GError **error)
 {
   GOptionContext *context = NULL;
   gboolean ret = FALSE;
-  GFile *repodir = NULL;
   GFile *child = NULL;
   GFile *grandchild = NULL;
   GString *config_data = NULL;
@@ -54,9 +53,7 @@ ostree_builtin_init (int argc, char **argv, const char *repo_path, GError **erro
   if (!g_option_context_parse (context, &argc, &argv, error))
     goto out;
 
-  repodir = ot_gfile_new_for_path (repo_path);
-
-  child = g_file_get_child (repodir, "config");
+  child = g_file_get_child (repo_path, "config");
 
   config_data = g_string_new (DEFAULT_CONFIG_CONTENTS);
   g_string_append_printf (config_data, "mode=%s\n", archive ? "archive" : "bare");
@@ -68,17 +65,17 @@ ostree_builtin_init (int argc, char **argv, const char *repo_path, GError **erro
     goto out;
   g_clear_object (&child);
 
-  child = g_file_get_child (repodir, "objects");
+  child = g_file_get_child (repo_path, "objects");
   if (!g_file_make_directory (child, NULL, error))
     goto out;
   g_clear_object (&child);
 
-  child = g_file_get_child (repodir, "tmp");
+  child = g_file_get_child (repo_path, "tmp");
   if (!g_file_make_directory (child, NULL, error))
     goto out;
   g_clear_object (&child);
 
-  child = g_file_get_child (repodir, "refs");
+  child = g_file_get_child (repo_path, "refs");
   if (!g_file_make_directory (child, NULL, error))
     goto out;
 
@@ -94,7 +91,7 @@ ostree_builtin_init (int argc, char **argv, const char *repo_path, GError **erro
 
   g_clear_object (&child);
 
-  child = g_file_get_child (repodir, "tags");
+  child = g_file_get_child (repo_path, "tags");
   if (!g_file_make_directory (child, NULL, error))
     goto out;
   g_clear_object (&child);
@@ -105,7 +102,6 @@ ostree_builtin_init (int argc, char **argv, const char *repo_path, GError **erro
     g_option_context_free (context);
   if (config_data)
     g_string_free (config_data, TRUE);
-  g_clear_object (&repodir);
   g_clear_object (&child);
   g_clear_object (&grandchild);
   return ret;
index 28e3ad8d034f05ce5530417abab3fdb62d32b984..f1a6e1bcdd382110baf38ea902fb4211a812510e 100644 (file)
@@ -160,11 +160,12 @@ object_iter_callback (OstreeRepo   *repo,
 }
 
 gboolean
-ostree_builtin_local_clone (int argc, char **argv, const char *repo_path, GError **error)
+ostree_builtin_local_clone (int argc, char **argv, GFile *repo_path, GError **error)
 {
   gboolean ret = FALSE;
   GOptionContext *context;
   const char *destination;
+  GFile *dest_f = NULL;
   OtLocalCloneData data;
   GFile *src_repo_dir = NULL;
   GFile *dest_repo_dir = NULL;
@@ -196,13 +197,14 @@ ostree_builtin_local_clone (int argc, char **argv, const char *repo_path, GError
     }
 
   destination = argv[1];
+  dest_f = ot_gfile_new_for_path (destination);
 
-  data.dest_repo = ostree_repo_new (destination);
+  data.dest_repo = ostree_repo_new (dest_f);
   if (!ostree_repo_check (data.dest_repo, error))
     goto out;
 
-  src_repo_dir = ot_gfile_new_for_path (ostree_repo_get_path (data.src_repo));
-  dest_repo_dir = ot_gfile_new_for_path (ostree_repo_get_path (data.dest_repo));
+  src_repo_dir = g_object_ref (ostree_repo_get_path (data.src_repo));
+  dest_repo_dir = g_object_ref (ostree_repo_get_path (data.dest_repo));
 
   src_info = g_file_query_info (src_repo_dir, OSTREE_GIO_FAST_QUERYINFO,
                                 G_FILE_QUERY_INFO_NOFOLLOW_SYMLINKS,
@@ -242,6 +244,7 @@ ostree_builtin_local_clone (int argc, char **argv, const char *repo_path, GError
  out:
   if (context)
     g_option_context_free (context);
+  g_clear_object (&dest_f);
   g_clear_object (&src_repo_dir);
   g_clear_object (&dest_repo_dir);
   g_clear_object (&src_info);
index 9f55fb325df66db789a6c108818bcda9d9a1a72f..ebdbcd352c0c209197a716f3f08a169114183054 100644 (file)
@@ -32,7 +32,7 @@ static GOptionEntry options[] = {
 };
 
 gboolean
-ostree_builtin_log (int argc, char **argv, const char *repo_path, GError **error)
+ostree_builtin_log (int argc, char **argv, GFile *repo_path, GError **error)
 {
   GOptionContext *context;
   gboolean ret = FALSE;
index f50ec07cc0a6683970ffbcf80dda84e7a30c5ec1..30480b05c489c52a2de5c78578f4c5c5b8ec726e 100644 (file)
@@ -165,7 +165,7 @@ print_directory_recurse (GFile    *f,
 }
 
 gboolean
-ostree_builtin_ls (int argc, char **argv, const char *repo_path, GError **error)
+ostree_builtin_ls (int argc, char **argv, GFile *repo_path, GError **error)
 {
   GOptionContext *context;
   gboolean ret = FALSE;
index f9d4a2ce9cfdb04539ab18fa698607e0e44829d1..41510bc535e4d3494e4e1c91319cf097a730ef14 100644 (file)
@@ -42,7 +42,7 @@ usage_error (GOptionContext *context, const char *message, GError **error)
 }
 
 gboolean
-ostree_builtin_remote (int argc, char **argv, const char *repo_path, GError **error)
+ostree_builtin_remote (int argc, char **argv, GFile *repo_path, GError **error)
 {
   GOptionContext *context;
   gboolean ret = FALSE;
index 02dc0d75a74a77290e3ad3db50537e03db3600bf..b60a6082e41b30dabb52f3b185e6c3a4e0f0d6c5 100644 (file)
@@ -32,7 +32,7 @@ static GOptionEntry options[] = {
 };
 
 gboolean
-ostree_builtin_rev_parse (int argc, char **argv, const char *repo_path, GError **error)
+ostree_builtin_rev_parse (int argc, char **argv, GFile *repo_path, GError **error)
 {
   GOptionContext *context;
   gboolean ret = FALSE;
index dd33211f36251b0360f2146bd23c35ae5fef8f39..d5be7a32b7e6d983c9f828a4cb76abbde59a5a2e 100644 (file)
@@ -35,7 +35,7 @@ static GOptionEntry options[] = {
 };
 
 gboolean
-ostree_builtin_run_triggers (int argc, char **argv, const char *repo_path, GError **error)
+ostree_builtin_run_triggers (int argc, char **argv, GFile *repo_path, GError **error)
 {
   GOptionContext *context;
   gboolean ret = FALSE;
index c25dc8c34c754f4a38b44b2d06703d5534516aee..1fe7b406faecaa686f61e1199026eb572c0e7afc 100644 (file)
@@ -192,7 +192,7 @@ do_print_compose (OstreeRepo  *repo,
 }
 
 gboolean
-ostree_builtin_show (int argc, char **argv, const char *repo_path, GError **error)
+ostree_builtin_show (int argc, char **argv, GFile *repo_path, GError **error)
 {
   GOptionContext *context;
   gboolean ret = FALSE;
index cfacaad155bc316cd4a0ea68bb0dc83cfdb9ae71..acf2406cebc48033aa37e6a9506c9aaf98d5103a 100644 (file)
 #ifndef __OSTREE_BUILTINS__
 #define __OSTREE_BUILTINS__
 
-#include <glib-object.h>
+#include <gio/gio.h>
 
 G_BEGIN_DECLS
 
-gboolean ostree_builtin_checkout (int argc, char **argv, const char *repo, GError **error);
-gboolean ostree_builtin_checksum (int argc, char **argv, const char *repo, GError **error);
-gboolean ostree_builtin_commit (int argc, char **argv, const char *repo, GError **error);
-gboolean ostree_builtin_compose (int argc, char **argv, const char *repo, GError **error);
-gboolean ostree_builtin_diff (int argc, char **argv, const char *repo, GError **error);
-gboolean ostree_builtin_init (int argc, char **argv, const char *repo, GError **error);
-gboolean ostree_builtin_local_clone (int argc, char **argv, const char *repo, GError **error);
-gboolean ostree_builtin_log (int argc, char **argv, const char *repo, GError **error);
-gboolean ostree_builtin_ls (int argc, char **argv, const char *repo, GError **error);
-gboolean ostree_builtin_run_triggers (int argc, char **argv, const char *repo, GError **error);
-gboolean ostree_builtin_fsck (int argc, char **argv, const char *repo, GError **error);
-gboolean ostree_builtin_show (int argc, char **argv, const char *repo, GError **error);
-gboolean ostree_builtin_rev_parse (int argc, char **argv, const char *repo, GError **error);
-gboolean ostree_builtin_remote (int argc, char **argv, const char *repo, GError **error);
+gboolean ostree_builtin_checkout (int argc, char **argv, GFile *repo_path, GError **error);
+gboolean ostree_builtin_checksum (int argc, char **argv, GFile *repo_path, GError **error);
+gboolean ostree_builtin_commit (int argc, char **argv, GFile *repo_path, GError **error);
+gboolean ostree_builtin_compose (int argc, char **argv, GFile *repo_path, GError **error);
+gboolean ostree_builtin_diff (int argc, char **argv, GFile *repo_path, GError **error);
+gboolean ostree_builtin_init (int argc, char **argv, GFile *repo_path, GError **error);
+gboolean ostree_builtin_local_clone (int argc, char **argv, GFile *repo_path, GError **error);
+gboolean ostree_builtin_log (int argc, char **argv, GFile *repo_path, GError **error);
+gboolean ostree_builtin_ls (int argc, char **argv, GFile *repo_path, GError **error);
+gboolean ostree_builtin_run_triggers (int argc, char **argv, GFile *repo_path, GError **error);
+gboolean ostree_builtin_fsck (int argc, char **argv, GFile *repo_path, GError **error);
+gboolean ostree_builtin_show (int argc, char **argv, GFile *repo_path, GError **error);
+gboolean ostree_builtin_rev_parse (int argc, char **argv, GFile *repo_path, GError **error);
+gboolean ostree_builtin_remote (int argc, char **argv, GFile *repo_path, GError **error);
 
 G_END_DECLS
 
index e951252b0613028f6c00fc853d2cf124d7943472..1492e8e2517f0e791f7b6acff10848fff609f7d8 100644 (file)
@@ -27,6 +27,7 @@
 #include <string.h>
 
 #include "ot-main.h"
+#include "otutil.h"
 
 static int
 usage (char **argv, OstreeBuiltin *builtins, gboolean is_error)
@@ -91,6 +92,7 @@ ostree_main (int    argc,
   gboolean have_repo_arg;
   const char *cmd = NULL;
   const char *repo = NULL;
+  GFile *repo_file = NULL;
   int arg_off;
 
   g_type_init ();
@@ -110,6 +112,9 @@ ostree_main (int    argc,
   else
     repo = NULL;
 
+  if (repo)
+    repo_file = ot_gfile_new_for_path (repo);
+
   cmd = strchr (argv[0], '-');
   if (cmd)
     {
@@ -151,11 +156,12 @@ ostree_main (int    argc,
   
   prep_builtin_argv (cmd, argc-arg_off, argv+arg_off, &cmd_argc, &cmd_argv);
 
-  if (!builtin->fn (cmd_argc, cmd_argv, repo, &error))
+  if (!builtin->fn (cmd_argc, cmd_argv, repo_file, &error))
     goto out;
 
  out:
   g_free (cmd_argv);
+  g_clear_object (&repo_file);
   if (error)
     {
       g_printerr ("%s\n", error->message);
index 2fb54cd3746b71304d3f5e892d2e8bfc38c16d74..34142cf8bbd0cf13ed305744d9fae8689b438166 100644 (file)
@@ -29,7 +29,7 @@ typedef enum {
 
 typedef struct {
   const char *name;
-  gboolean (*fn) (int argc, char **argv, const char *repo, GError **error);
+  gboolean (*fn) (int argc, char **argv, GFile *repo_path, GError **error);
   int flags; /* OstreeBuiltinFlags */
 } OstreeBuiltin;